package lazy.multithreading;

/**
 * @Description
 * @Author zhousl
 * @Date 2023/4/2 23:11
 */
public class ThreadLazySingleton {

    /**
     * volatile
     * 1、保证了不同线程对这个变量进行操作时的可见性，即一个线程修改了某个变量的值，这新值对其他线程来说是立即可见的。
     * 2、禁止进行指令重排序。
     */
    private volatile static ThreadLazySingleton singleton;
    private ThreadLazySingleton(){

    }

    public  static ThreadLazySingleton getInstance(){
        if(singleton==null){
            synchronized (ThreadLazySingleton.class){
                if(singleton==null){
                    singleton = new ThreadLazySingleton();
                }
            }

        }
        return singleton;
    }
}
